package com.sophossystems.client.asmon.dao.spring;

import java.sql.SQLException;
import java.util.List;

import com.sophossystems.client.asmon.dao.LugarRecoleccionDao;
import com.sophossystems.client.asmon.dto.LugarRecoleccionDTO;
import com.sophossystems.client.asmon.exceptions.DaoException;

import org.apache.log4j.Logger;
import org.hibernate.HibernateException;
import org.hibernate.Session;
import org.hibernate.Query;
import org.hibernate.transform.Transformers;
import org.springframework.orm.hibernate3.HibernateCallback;

public class LugarRecoleccionDaoImpl extends AbstractDAO implements LugarRecoleccionDao {

	private static Logger logger = Logger.getLogger(LugarRecoleccionDaoImpl.class);
	
	@Override
	public LugarRecoleccionDTO findByPrimaryKey(final int idLugar)
			throws DaoException {
		LugarRecoleccionDTO lugar = null;
		try {
			lugar = (LugarRecoleccionDTO) getHibernateTemplate().execute(
					new HibernateCallback() {
						
						@Override
						public Object doInHibernate(Session session) throws HibernateException,
								SQLException {
							final Query oQuery = session.createQuery(
									"SELECT l.idLugar as idLugar, l.descripcion as descripcion " +
									"FROM " + getTableName() + " l WHERE l.idLugar = :id");
							oQuery.setInteger("id", idLugar);
							LugarRecoleccionDTO lugarRecoleccionDto = (LugarRecoleccionDTO) 
									oQuery.setResultTransformer(
									Transformers
									.aliasToBean(LugarRecoleccionDTO.class)).list().get(0);
							
							return lugarRecoleccionDto;
						}
					});
		} catch (final Exception e) {
			logger.error("Error: getLugarRecoleccion, cause: " + e.getMessage(), e);
			throw new DaoException("Error: getLugarRecoleccion, cause: "
					+ e.getMessage());
			
		}

		return lugar;
	}

	@SuppressWarnings("unchecked")
	@Override
	public List<LugarRecoleccionDTO> findAll() throws DaoException {
		List<LugarRecoleccionDTO> lugar = null;
		try {
			lugar = (List<LugarRecoleccionDTO>) getHibernateTemplate().executeFind(
					new HibernateCallback() {
						
						@Override
						public Object doInHibernate(Session session) throws HibernateException,
								SQLException {
							final Query oQuery = session.createQuery("SELECT l.idLugar as idLugar, " +
									"l.descripcion as descripcion FROM " 
									+ getTableName() + " l ORDER BY l.idLugar");
							List<LugarRecoleccionDao> lugarDto = oQuery.setResultTransformer(
									Transformers.aliasToBean(
											LugarRecoleccionDTO.class)).list();
							return lugarDto;
						}
					});
		} catch (Exception e) {
			logger.error("Error: getLugarRecoleccion All, cause: " + e.getMessage(), e);
			throw new DaoException("Error: getLugarRecoleccion All, cause: "
					+ e.getMessage());
		}
		return lugar;
	}

	
	public String getTableName() {
		return "LugarRecoleccion";
	}
}
